home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol036 / ck.bas < prev    next >
Encoding:
BASIC Source File  |  1987-01-11  |  12.9 KB  |  332 lines

  1. 1 REM COMPUTER KEYBOARDING PROGRAM -- DICTATION DISC COMPANY 2/83
  2. 2 REM COURSE DEVELOPED BY FRANK DONNELY
  3. 3 REM MODIFIED FOR COMPUTER BY JOHN VISAGGI
  4. 4 REM PROGRAMMED BY LOUIS SOLOMON
  5. 9  WIDTH 255            'SETS INFINITE WIDTH - NO FORMFEEDS
  6. 10 GOSUB 50             'CALL INTIALIZATION
  7. 20 GOTO 1000            'START PROGRAM
  8. 50 REM **** INITIALIZATION ROUTINE ****
  9. 51 DIM T$(10,80),LASTCOL%(25),ROW$(25),REPS%(100),TI%(100)
  10. 52 DIM STARTL%(100),STARTD%(100),ROWLINE%(100),TYPE$(100),RE%(100)
  11. 60 REM **** SCREEN CODE INITS
  12. 65 CLS$=CHR$(4):REV$=CHR$(20):HOME$=CHR$(2):FF$=CHR$(12)
  13. 66 SH=23:SW=79                  'SCREEN HEIGHT AND WIDTH
  14. 68 FOR X=1 TO 38:DILINE$=DILINE$+"- ":NEXT X
  15. 70 REM **** TIMING LOOP CONSTANTS
  16. 72 MINAMT=4800                  'MINUTE AMOUNT
  17. 74 TSAMT=MINAMT/2               '30 SECOND AMOUNT
  18. 76 TCONSTANT=1/MINAMT           'TIME CONSTANT
  19. 78 RETTIME=3                    'TIME FOR RETURN KEY
  20. 80 BSTIME=3                     'TIME FOR BACKSPACE KEY
  21. 82 BCTIME=3                     'TIME FOR BAD CHARACTER
  22. 84 ADDTIME=8.3                  'TIME FOR CORRECT CHARACTER
  23. 90 RETURN
  24. 100 REM **** CURSOR POSITIONING ROUTINE -- PASS R & C AS ROW/COLUMN
  25. 102 IF INT(R)<>R OR INT(C)<>C OR R>SH OR C>SW THEN RETURN
  26. 104 PRINT CHR$(27+128);CHR$(C+128);CHR$(R+128); 
  27. 108 RETURN
  28. 120 REM **** PLACE CURSOR AT PARTICULAR ENTRY POSITION
  29. 121 REM PASS STARTING ROW,NUMBER OF ROWS IN DRILL,ROW AND COLUMN
  30. 122 R=STARTROW+NOROWS+X+1:C=Y:GOSUB 100
  31. 128 RETURN
  32. 130 REM **** BRING TEXT IN FROM LESSON FILE
  33. 131 REM NOTE THAT OFFSET OF 1 TO COMPENSATE FOR SPACE BETWEEN LESSONS
  34. 132 NOROWS=STARTL%(LES+1)-STARTL%(LES)-1 'NUMBER OF LINES IN LESSON
  35. 134 COUNTER=0                                   
  36. 140 FOR X=STARTL%(LES)+1 TO STARTL%(LES+1)-1
  37. 141       COUNTER=COUNTER+1
  38. 142       ROW$(COUNTER)=""
  39. 143       GET #1,X
  40. 146       ROW$(COUNTER)=R$                      
  41. 147 REM PRINT COUNTER,ROW$(COUNTER)
  42. 148 NEXT X
  43. 149 RETURN
  44. 150 REM **** BRING TEXT IN FROM DRILLS
  45. 151 REM NOTE THAT NOROWS AND STARTLES TAKE INTO ACCOUNT THE $$$$
  46. 152 NOROWS=STARTD%(LES+1)-STARTD%(LES)-1:COUNTER=0
  47. 153 IF NOROWS<=0 THEN NOROWS=STARTD%(LES+2)-STARTD%(LES)-1
  48. 154 IF NOROWS<=0 THEN NOROWS=STARTD%(LES+3)-STARTD%(LES)-1
  49. 155 FOR X=STARTD%(LES)+1 TO STARTD%(LES)+NOROWS
  50. 156       COUNTER=COUNTER+1
  51. 158       ROW$(COUNTER)=""
  52. 162       GET #2,X
  53. 163       ROW$(COUNTER)=D$
  54. 165 LASTCOL%(COUNTER)=INSTR(ROW$(COUNTER),">")-1
  55. 166 NEXT X
  56. 167 RETURN
  57. 210 REM **** PRINT TEXT IN PROPER POSITION
  58. 211 FOR X=1 TO NOROWS                           
  59. 212 R=STARTROW+X-1:C=1:GOSUB 100                
  60. 213 LC=INSTR(ROW$(X),">")-1
  61. 216 IF LC<1 THEN LC=0                           
  62. 217 PRINT LEFT$(ROW$(X),LC)                     
  63. 218 NEXT X                                      
  64. 219 RETURN
  65. 220 REM **** WAIT FOR PARTICULAR CHARACTER  NON-TIMED
  66. 222 A$=INKEY$:IF LEN(A$)=0 THEN 222             
  67. 224 IF ASC(A$)=8 THEN BACKSP=1
  68. 225 IF ASC(A$)=13 THEN RET=1
  69. 226 IF ASC(A$)=27 THEN ESC=1
  70. 229 RETURN
  71. 300 REM **** CHARACTER ENTRY TIMED ****
  72. 314 A$=INKEY$                                   
  73. 318 IF START=1 THEN TIME=TIME+1                                 
  74. 320 IF TIME>TIMELIMIT THEN OVER=1:RETURN
  75. 324 IF LEN(A$)=0 THEN 314                       
  76. 326 CHARCOUNT=CHARCOUNT+1                       
  77. 328 A=ASC(A$)                                   
  78. 332 IF A=13 THEN RET=1:TIME=TIME+RETTIME:RETURN    
  79. 334 IF A=8 THEN BACKSP=1:TIME=TIME+BSTIME:RETURN   
  80. 335 IF A=27 THEN ESC=1:TIME=TIME+1:RETURN
  81. 336 IF A<32 OR A>126 THEN TIME=TIME+BCTIME:GOTO 314
  82. 340 IF START=0 THEN START=1:TIME=0               
  83. 344 IF START=1 THEN TIME=TIME+ADDTIME:NRM=1
  84. 352 RETURN                                      
  85. 480 REM *** PRINT ANY TEXT ON SCREEN
  86. 482 GOSUB 130:PRINT CLS$:GOSUB 210
  87. 486 RETURN
  88. 600 REM ****** TIMED TEXT ROUTINE MAIN CALLING ROUTINE
  89. 604 STARTROW=0:GOSUB 480                'PRINT LESSON
  90. 606 IF STARTD%(LES)=0 THEN 699          'RETURN BACK - NO DRILL
  91. 618 TT=1:GOSUB 970                      'PROMPT TO START DRILL
  92. 620 STARTROW=5                          'START OF DRILL IS 5
  93. 624 REM RUN TIMED TEXT
  94. 636 F$=STR$(LES)
  95. 640 GOSUB 150                           'BRING TEXT IN FROM DRILL
  96. 641 FOR COUNTER=1 TO REPS%(LES)         'LOOP FOR NO. OF REPS
  97. 642 TIME=0:CHARCOUNT=0:OVER=0:OFF=0     'INTIALIZE VALUES
  98. 643 IF TI%(LES)=1 THEN TIMELIMIT=TSAMT ELSE TIMELIMIT=MINAMT
  99. 644 GOSUB 980                           'TITLE OF DRILL
  100. 648 GOSUB 210                           'PRINT DRILL
  101. 650 SR=STARTROW:NR=NOROWS               'SAVE CONSTANTS
  102. 652 GOSUB 670                           'ACTUAL TIMING
  103. 656 GOSUB 860                           'TIMING RESULTS ROUTINE
  104. 659 NEXT COUNTER                        'END LOOP REPS%
  105. 660 RETURN
  106. 670 REM ****** TIMED ENTRY ROUTINE
  107. 672 Y=1:START=0:X=0:BACKSP=0:ESC=0:RET=0'INITIALIZE VALUES
  108. 674 A$=INKEY$:A$=INKEY$                 'FLUSH KEYBOARD BUFFER
  109. 678 IF Y<=1 THEN Y=1                    'DONT PASS LEFT EDGE
  110. 679 IF Y=SW THEN X=X+1:Y=0              'DONT PASS RIGHT EDGE
  111. 680 IF X>=SH THEN X=SH                  'DONT PASS BOTTOM
  112. 681 GOSUB 120                           'PLACE CURSOR AT POSTION
  113. 682 GOSUB 300                           'GET IN CHARACTER TIMED
  114. 684 IF RET=1 THEN X=X+1:Y=1             'PROCESS RETURN
  115. 685 IF BACKSP=1 THEN Y=Y-1              'PROCESS BACKSPACE
  116. 687 IF OVER=1 THEN OVER=0:RETURN        'PROCESS TIMEOUT
  117. 688 IF ESC=1 THEN ESC=0:RETURN          'PROCESS ESCAPE
  118. 689 IF NRM=1 THEN PRINT A$;:Y=Y+1       'NORMAL CHARACTER
  119. 690 RET=0:BACKSP=0:NRM=0                'INITIALIZE VALUES
  120. 692 GOTO 678                            'LOOP BACK NEXT CHARACTER
  121. 700 REM ***** FREE FORMED TEXT ENTRY MAIN CALLING ROUTINE
  122. 705 STARTROW=0:GOSUB 480         'PRINT LESSONS
  123. 710 STARTROW=NOROWS+1            'CALCULATE START OF DRILL PLACEMENT
  124. 724 GOSUB 150:GOSUB 210          'GET AND PRINT DRILL
  125. 727 FOR COUNTER=1 TO REPS%(LES)  'LOOP FOR NUMBER OF REPS
  126. 730 GOSUB 740                    'FREE FORMED TEXT ENTRY
  127. 732 NEXT COUNTER                 'END LOOP
  128. 738 RETURN                       'RETURN
  129. 740 REM ****** FREE FORMED TEXT ENTRY ROUTINE
  130. 742 Y=1:START=0:X=0:BACKSP=0:ESC=0:RET=0'INITIALIZE VALUES
  131. 744 A$=INKEY$:A$=INKEY$          'FLUSH KEYBOARD BUFFER
  132. 748 IF Y<=1 THEN Y=1
  133. 749   IF Y=SW THEN X=X+1:Y=0
  134. 750   IF X>=SH THEN X=SH
  135. 751   GOSUB 120 'PLACE CURSOR AT POSTION
  136. 752   GOSUB 220 'GET IN CHARACTER
  137. 754   IF RET=1 THEN RET=0:X=X+1:Y=1:GOTO 750
  138. 757   IF BACKSP=1 THEN BACKSP=0:Y=Y-1:GOTO 748
  139. 758   IF ESC=1 THEN ESC=0:RETURN
  140. 759   PRINT A$;:Y=Y+1::GOTO 748
  141. 800 REM ****** MENU PROGRAM
  142. 810 OPEN "I",#3,"MENU"
  143. 812 PRINT CLS$;
  144. 814 IF EOF(3) THEN 820                          
  145. 815 LINE INPUT #3,A$:PRINT A$:GOTO 814          
  146. 820 CLOSE #3
  147. 822 INPUT "Please enter lesson to start from (then press return) ",ST
  148. 823 IF ST=99 THEN 3000
  149. 824 IF ST=0 THEN RESET:SYSTEM
  150. 825 IF ST>100 OR ST<1 OR ST<>INT(ST) THEN 800
  151. 826 LES=ST
  152. 829 RETURN
  153. 830 REM MAIN TITLE
  154. 831 OPEN "I",#3,"TITLE"
  155. 832 PRINT CLS$;
  156. 833 IF EOF(3) THEN 835                          
  157. 834 LINE INPUT #3,A$:PRINT A$:GOTO 833          
  158. 835 CLOSE #3
  159. 836 S$="Press any key to display menu":PRINT TAB(20);S$
  160. 837 B$=INPUT$(1)
  161. 838 GOSUB 940
  162. 840 RETURN
  163. 850 REM DISPLAY ONLY TEXT  TYPE
  164. 855 STARTROW=0:GOSUB 480
  165. 856 STARTROW=NOROWS+1:GOSUB 740                 'GET ENTRY
  166. 859 RETURN
  167. 860 REM *** TIMING RESULTS SUBROUTINE
  168. 861 FOR X=1 TO NR                               'ERASE TIMING PARAGRAPH
  169. 862 R=SR+X-1:C=1:GOSUB 100
  170. 863 PRINT STRING$(78," ");
  171. 864 NEXT X
  172. 876 WORDS=INT(CHARCOUNT/5+.5)
  173. 878 MINUTES=TIME*TCONSTANT
  174. 880 WPM=INT(WORDS/MINUTES+.5)
  175. 881 R=2:C=60:GOSUB 100
  176. 882 PRINT "Timing ";COUNTER;" of ";REPS%(LES)
  177. 883 R=SR:C=0:GOSUB 100             'PLACE CURSOR
  178. 884 PRINT "You just typed ";WORDS;"words at ";WPM;" words per minute"
  179. 886 IF RE%(LES)>0 AND COUNTER<REPS%(LES) THEN GOSUB 900
  180. 887 IF COUNTER<REPS%(LES) THEN GOSUB 890 '15 SECOND PAUSE
  181. 888 RETURN
  182. 890 REM 15 SECOND PAUSE BETWEEN TIMINGS
  183. 891 R=22:C=1:GOSUB 100
  184. 892 PRINT "GET READY FOR NEXT TIMING...."
  185. 893 TIME=0:START=1
  186. 894 TIMELIMIT=TSAMT/2:GOSUB 300
  187. 895 RETURN
  188. 900 REM REMARK COMMENTS
  189. 901 PRINT
  190. 902 P=COUNTER+RE%(LES)-1+OFF
  191. 904 GET #2,P
  192. 906 L=INSTR(D$,">")-1
  193. 908 IF INSTR(D$,"\")>0 THEN NL=1 ELSE NL=0
  194. 910 IF NL=1 THEN PRINT LEFT$(D$,L-1) ELSE PRINT LEFT$(D$,L)
  195. 920 IF NL=1 THEN GET #2,P+1:L=INSTR(D$,">")-1
  196. 922 IF NL=1 THEN PRINT LEFT$(D$,L-1):OFF=OFF+1
  197. 925 RETURN
  198. 940 REM MESSAGE
  199. 942 PRINT CLS$
  200. 944 R=10:C=20:GOSUB 100                         
  201. 946 PRINT "Please wait one moment ..."
  202. 948 RETURN
  203. 950 REM *** WAIT FOR RETURN PROMPT AT BOTTOM
  204. 952 R=22:C=1:GOSUB 100                          
  205. 954 PRINT "Press [Return] to Next, [R] to Repeat, [B] to Go Back, [M] to Menu"
  206. 956 R=22:C=74:GOSUB 100
  207. 957 TIME=0:START=0
  208. 958 TIMELIMIT=100000!:GOSUB 300:I$=A$
  209. 960 IF I$=CHR$(13) THEN LES=LES+1:GOTO 968      
  210. 962 IF I$="B" OR I$="b" THEN LES=LES-1:GOTO 968 
  211. 964 IF I$="M" OR I$="m" THEN LES=0:GOTO 968
  212. 965 IF I$="R" OR I$="r" THEN LES=LES:GOTO 968   
  213. 966 GOTO 952                                    
  214. 968 RETURN
  215. 970 REM IN BETWEEN TIMINGS PROMPT
  216. 971 R=22:C=1:GOSUB 100                          
  217. 972 M$="Press [Return] to view timing ... Timing starts when first key pressed"
  218. 974 PRINT M$;:R=22:C=70:GOSUB 100
  219. 975 TIME=0:START=0
  220. 976 TIMELIMIT=100000!:GOSUB 300:I$=A$
  221. 977 IF I$=CHR$(13) THEN RETURN ELSE 976
  222. 980 REM **** TITLE ROUTINE
  223. 982 PRINT CLS$;                                 
  224. 984 S$="DICTATION DISC COMPANY":GOSUB 990       
  225. 985 S$="COMPUTER KEYBOARDING -- LESSON "+F$:GOSUB 990
  226. 986 PRINT DILINE$
  227. 987 RETURN
  228. 990 REM **** CENTER ON PAGE ROUTINE
  229. 992 T=INT(40-LEN(S$)/2)
  230. 993 PRINT TAB(T);S$
  231. 994 RETURN
  232. 1000 REM MAIN BODY OF PROGRAM
  233. 1001 OPEN "R",#1,"LESRAN",80:FIELD #1,80 AS R$
  234. 1002 OPEN "R",#2,"DRILRAN",80:FIELD #2,80 AS D$
  235. 1005 GOSUB 830                                  
  236. 1010 FRAMES=84
  237. 1012 GOSUB 2000 'STARTING LINE FOR LESSON
  238. 1014 GOSUB 2100 'STARTING LINE FOR DRILLS
  239. 1016 GOSUB 2200 'COMPUTE STARTING LINE FOR EXACTS
  240. 1018 GOSUB 2400 'LESSON INFORMATION
  241. 1020 GOSUB 800                                  
  242. 1040 REM START OF TYPE CALLING PROGRAMS
  243. 1041 IF TYPE$(LES)="T" THEN GOSUB 600
  244. 1042 IF TYPE$(LES)="F" THEN GOSUB 700
  245. 1043 IF TYPE$(LES)="D" THEN GOSUB 850
  246. 1045 GOSUB 950'CALL MENU CHANGE LES
  247. 1050 GOSUB 940                                  
  248. 1055 A=FRE("A")
  249. 1060 IF LES=0 THEN 1020                         
  250. 1070 GOTO 1040
  251. 2000 REM GET STARTING LINE FOR LESSONS ARRAY
  252. 2010 OPEN "I",#3,"LESST"
  253. 2020 FOR X=1 TO FRAMES+1
  254. 2030 INPUT #3,LES,START                         
  255. 2040 STARTL%(X)=START                            
  256. 2050 NEXT X                                     
  257. 2055 CLOSE #3
  258. 2060 RETURN                                     
  259. 2100 REM GET STARTING LINE FOR DRILLS  ARRAY
  260. 2110 OPEN "I",#3,"DRIST"
  261. 2130 IF EOF(3) THEN 2160                        
  262. 2135 INPUT #3,LES,START                         
  263. 2140 STARTD%(LES)=START                          
  264. 2150 GOTO 2130                                  
  265. 2160 CLOSE #3:RETURN
  266. 2200 REM COMPUTE ROWLINE% (START ROW OF DRILLS) ARRAY
  267. 2210 FOR X=1 TO FRAMES
  268. 2220 N=STARTL%(X+1)-STARTL%(X)-1                  
  269. 2230 ROWLINE%(X)=N+1                             
  270. 2240 NEXT X
  271. 2250 RETURN
  272. 2400 REM GET LESSON INFORMATION
  273. 2410 X=0
  274. 2415 OPEN "I",#3,"LESINF"
  275. 2420 IF EOF(3) THEN 2460
  276. 2425 X=X+1
  277. 2430 INPUT #3,A$
  278. 2434 TYPE$(X)=LEFT$(A$,1)
  279. 2435 REPS%(X)=VAL(MID$(A$,15,5)):IF REPS%(X)=0 THEN REPS%(X)=1
  280. 2436 TI%(X)=VAL(MID$(A$,28,6))
  281. 2438 Y=VAL(MID$(A$,44,6))
  282. 2439 IF Y=0 THEN RE%(X)=0 ELSE RE%(X)=Y+STARTD%(FRAMES+1)-2
  283. 2440 GOTO 2420
  284. 2460 CLOSE #3
  285. 2470 RETURN
  286. 3000 REM PRINT OUT LESSONS
  287. 3005 INPUT "START AT WHAT LESSON";S:IF S=0 THEN S=1
  288. 3006 INPUT "END AT WHAT LESSON";E:IF E=0 THEN E=FRAMES
  289. 3010 FOR LES=S TO E
  290. 3020 P=1:GOSUB 130:GOSUB 3200
  291. 3030 IF TYPE$(LES)<>"D" THEN P=0:GOSUB 150:GOSUB 3200
  292. 3031 GOSUB 3400
  293. 3035 IF RE%(LES)>0 THEN GOSUB 3300'PRINT REMARKS
  294. 3040 NEXT LES
  295. 3050 END
  296. 3200 REM PRINT TO LINE PRINTER
  297. 3210 IF P=1 THEN LPRINT CHR$(12); ELSE LPRINT:LPRINT:LPRINT'FORM FEED
  298. 3211 FOR X=1 TO NOROWS
  299. 3213 LC=INSTR(ROW$(X),">")-1
  300. 3216 IF LC<1 THEN LC=0
  301. 3217 LPRINT LEFT$(ROW$(X),LC)
  302. 3218 NEXT X
  303. 3219 RETURN
  304. 3300 REM PRINT REMARKS OUT
  305. 3310 LPRINT:LPRINT "===REMARKS===":OFF=0
  306. 3315 FOR COUNTER=1 TO REPS%(LES)-1
  307. 3316 LPRINT COUNTER;"--  ";
  308. 3318 GOSUB 3900
  309. 3320 NEXT COUNTER
  310. 3330 RETURN
  311. 3400 REM PRINT OUT LESSON INFO
  312. 3401 LPRINT:LPRINT
  313. 3405 LPRINT "===LESSON INFORMATION==="
  314. 3410 IF TYPE$(LES)="F" THEN LPRINT "Normal non-timed drill"
  315. 3411 IF TYPE$(LES)="T" THEN LPRINT "Timed typing"
  316. 3412 IF TYPE$(LES)="D" THEN LPRINT "Display only text"
  317. 3415 LPRINT REPS%(LES);" Repetition)"
  318. 3416 IF TYPE$(LES)="T" AND TI%(LES)=1 THEN LPRINT "30 seconds each"
  319. 3417 IF TYPE$(LES)="T" AND TI%(LES)=2 THEN LPRINT "One minute each"
  320. 3418 RETURN
  321. 3900 REM REMARK COMMENTS
  322. 3901 PRINT
  323. 3902 P=COUNTER+RE%(LES)-1+OFF
  324. 3904 GET #2,P
  325. 3906 L=INSTR(D$,">")-1
  326. 3908 IF INSTR(D$,"\")>0 THEN NL=1 ELSE NL=0
  327. 3910 IF NL=1 THEN LPRINT LEFT$(D$,L-1) ELSE LPRINT LEFT$(D$,L)
  328. 3920 IF NL=1 THEN GET #2,P+1:L=INSTR(D$,">")-1
  329. 3922 IF NL=1 THEN LPRINT "       ";LEFT$(D$,L-1):OFF=OFF+1
  330. 3925 RETURN
  331. $,L)
  332. 3920 IF NL